package com.zw.pdm.module.contact.service;


import com.zw.pdm.base.BaseService;
import com.zw.pdm.entity.sys.User;
import com.zw.pdm.module.afterSale.mapper.CheckDao;
import com.zw.pdm.module.afterSale.model.FileModel;
import com.zw.pdm.module.afterSale.model.ProjectModel;
import com.zw.pdm.module.contact.mapper.ContactDao;
import com.zw.pdm.module.contact.mapper.ProDao;
import com.zw.pdm.module.contact.model.Contact;
import com.zw.pdm.module.contact.model.ContactModel;
import com.zw.pdm.module.contact.model.Post;
import com.zw.pdm.util.FileUtils;
import com.zw.pdm.util.ShiroUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

@Service
public class ContactService extends BaseService {

    @Autowired
    private ContactDao contactDao;

    @Autowired
    private ProDao proDao;

    @Autowired
    private CheckDao checkDao;

    @Value("${user.upload.path}")
    private String uploadPath;


    /**
     * 项目信息 模糊查询下拉框
     */
    public List<ProjectModel> selectLikeProCode(String proCode) {
        return contactDao.selectLikeProCode(proCode);
    }

    /**
     * 项目信息 填充其他基本信息
     */
    public ProjectModel selectProInfoByCode(String proCode) {
        return contactDao.selectProInfoByCode(proCode);
    }


    /**
     * 联络单回复 页面列表查询
     */
    public List<Contact> queryContactList(Contact contact) {
        return contactDao.queryContactList(contact);
    }

    /**
     * 查询联络主单 信息
     */
    public Contact queryCcontactInfoById(int id) {
        return contactDao.queryCcontactInfoById(id);
    }

    /**
     * 查询联络子单 信息 by 主单id
     */
    public List<ContactModel> queryRcontactInfoByCid(int id) {
        return contactDao.queryRcontactInfoByCid(id);
    }

    /**
     * 查询对应科室id的科长
     */
//    public String queryCanYuRenByBranchId(int branchId) {
//        return contactDao.queryCanYuRenByBranchId(branchId);
//    }


    /**
     * 联络单删除
     */
    public String delContactById(Integer id) {
        contactDao.delContactById(id);
        int i = contactDao.delContactSheetById(id);
        if (i == 1) {
            logService.saveLog("删除联络单，", "联络单id：" + id);
            return "删除成功";
        } else {
            return "删除失败，请联系管理员";
        }
    }

    /**
     * 附件下载
     */
    public void downLoadFile(String fileUrl, HttpServletResponse httpServletResponse) {
        String URL = fileUrl.substring(7);
        String localPath = uploadPath + URL;
        FileUtils.downloadFile(localPath, httpServletResponse);
    }


//    public List<ContactModel> selectCanYuRenId(int id) {
//        return contactDao.queryCanYuRenIdList(id);
//    }
//
//    public List<ContactModel> queryCreateIdList() {
//        return contactDao.queryCreateIdList();
//    }
//
//    public List<ContactModel> queryContactList2(ContactModel contactModel) {
//        contactModel.setLoginId(ShiroUtils.getUser().getId());
//        return contactDao.queryContactList2(contactModel);
//    }


    /**↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓修改表结构后↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓**/

    /**
     * 创建联络单
     */
    @Transactional(rollbackFor = Exception.class)
    public int newContact(String canYuBranchIdList, String content, String proId, String proCode, String proName,
                          String proQty, String special, String proPart, String conType, String customer,
                          String insSite, String fileUrl[], String fileName[], String postTel) {

        try {
            // proCode -> 由于前台没有处理好  接收到的值为 proid
            String Code = checkDao.queryProCodeByProId(proCode);
            /**主表插入一条数据*/
            Contact contact = new Contact();
            User user = ShiroUtils.getUser();
            contact.setProId(Integer.parseInt(proId));
            contact.setProCode(Code);
            contact.setProName(proName);
            contact.setProNum(Integer.parseInt(proQty));
            contact.setProPart(proPart);
            contact.setSpecial(special);
            contact.setConType(conType);
            contact.setCustomer(customer);
            contact.setInsSite(insSite);
            contact.setContactStatus(0);//总体状态 为0
            contact.setIsDel(0);
            contact.setPostTel(postTel);
            Post userPost = proDao.queryUserPostInfo(user.getId());//获取用户  部门 科室 信息
            /**拼接 创建人id 为字符串*/
            String createBranchId = "," + userPost.getBranchId();
            String liaisonBranchIdList = canYuBranchIdList + createBranchId;
            /**设置字段 LiaisonBranchIdList 的值为 前台传来的参与人科室id list  + ,创建人科室id*/
            contact.setLiaisonBranchIdList(liaisonBranchIdList);
            String[] branchList = liaisonBranchIdList.split(",");
            boolean f1 = branchList[1].equals("");
            String userIdList = "";
            if (!f1) {
                for (int i = 0; i < branchList.length; i++) {
                    if (i == branchList.length - 1) {
                        /** 查询出创建人（科长）id*/
                        int userId = proDao.queryUserIdByBranchId(Integer.parseInt(branchList[i]));
                        userIdList += userId;
                    } else {
                        /** 查询出参与人（科长）id*/
                        int userId = proDao.queryUserIdByBranchId(Integer.parseInt(branchList[i]));
                        userIdList += userId + ",";
                    }
                }
            }
            contact.setLiaisonIdList(userIdList);//设置字段 liaisonIdList 的值
            /**主表插入一条数据*/
            contactDao.insertNewContact(contact);//新建联络单 主

            Contact contactSonCreate = new Contact();
            Contact contactSonCanYu = new Contact();
            if (!f1) {
                for (int i = 0; i < branchList.length; i++) {
                    if (i == branchList.length - 1) {
                        /**最后一位 即为创建人*/
                        /**  插入 子表时 detail_status 值   要考虑创建人科室  若为销售科、项目科  创建后状态直接为2（待审核） 其余为1（未提交）
                         *  创建人 con_identity 值为1   参与人 con_identity 为2
                         *  创建人 只存edit_id1  edit_name1  字段
                         *  创建人 detailStatus1  detailStatus2 字段都要存
                         *  todo ！！！！创建人   状态改变    detailStatus1  detailStatus2 两个字段都要改变
                         *  todo 并且 对应的参与人的 detailStatus1 也要改变*/
                        //userPost 创建人 用户 部门 科室 信息

                        contactSonCreate.setConId(contact.getId());
                        contactSonCreate.setConIdentity(1);//创建人 con_identity 值为1   参与人 con_identity 为2
                        contactSonCreate.setEditId1(user.getId());
                        contactSonCreate.setEditName1(user.getName());
                        contactSonCreate.setBranchId(userPost.getBranchId());
                        contactSonCreate.setBranchName(userPost.getBranchName());
                        contactSonCreate.setDetailIsDel(0);
//                        if (userPost.getBranchName().equals("销售科") || userPost.getBranchName().equals("项目科")) {
//                            contactSonCreate.setDetailStatus1(2);//销售科 项目科 创建即为待审核
//                            contactSonCreate.setDetailStatus2(2);//销售科 项目科 创建即为待审核
//                        } else {
                        contactSonCreate.setDetailStatus1(1);
                        contactSonCreate.setDetailStatus2(1);
//                        }
                        contactSonCreate.setContent(content
                                .replaceAll("\r\n|\r|\n|\n\r", "<br>")
                                .replaceAll(" ", "&ensp;"));
//                        contactSonCreate.setContent(content.replaceAll("\r\n|\r|\n|\n\r","<br>"));
                        //向子表中插入数据
                        contactDao.insertNewContactDetail1(contactSonCreate);
                    } else {
                        /** 插入 子表时 detail_status 值   要考虑创建人科室  若为销售科、项目科  创建后状态直接为2  其余为1
                         *  参与人 con_identity 为2    创建人 con_identity 值为1
                         *  参与人 要 存入 edit_id2  edit_name1（每条数据都存发起人名字）  edit_name2（参与人名字）  字段
                         *  参与人 既存 detail_status2（参与人状态）  还要存 detail_status1（发起人状态）
                         * todo detail_status1 字段值 随 发起人的detail_status1改变而改变！！！！！！！*/
                        int userId = proDao.queryUserIdByBranchId(Integer.parseInt(branchList[i]));
                        Post canYuUserPost = proDao.queryUserPostInfo(userId); //参与人人 用户 部门 科室 信息

                        contactSonCanYu.setConId(contact.getId());
                        contactSonCanYu.setConIdentity(2);//创建人 con_identity 值为1   参与人 con_identity 为2
//                        contactSonCanYu.setEditId2(canYuUserPost.getSysId());
//                        contactSonCanYu.setEditName2(canYuUserPost.getUserName());
                        contactSonCanYu.setEditName1(user.getName());
                        contactSonCanYu.setBranchId(canYuUserPost.getBranchId());
                        contactSonCanYu.setBranchName(canYuUserPost.getBranchName());
                        contactSonCanYu.setDetailIsDel(0);
//                        if (userPost.getBranchName().equals("销售科") || userPost.getBranchName().equals("项目科")) {
//                            contactSonCanYu.setDetailStatus1(2);//销售科 项目科 创建即为待审核
//                            contactSonCanYu.setDetailStatus2(2);//销售科 项目科 创建即为待审核
//                        } else {
                        contactSonCanYu.setDetailStatus1(1);
                        contactSonCanYu.setDetailStatus2(1);
//                        }
                        //向子表中插入数据
                        contactDao.insertNewContactDetail2(contactSonCanYu);
                    }
                }
            }
            /**2. 处理临时附件文件 到 数据库*/
            if (fileUrl != null) {
                if (fileUrl.length > 0) {
                    int l2 = fileUrl.length;
                    for (int i = 0; i < l2; i++) {
                        FileModel fileModel = new FileModel();
                        StringBuffer dir = new StringBuffer();
                        dir.append(uploadPath).append(contact.getId()).append("/");
                        try {
                            org.apache.commons.io.FileUtils.moveToDirectory(new File(fileUrl[i]), new File(dir.toString()), true);
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                        StringBuffer srcPart = new StringBuffer();
                        srcPart.append(uploadPath).append(ShiroUtils.getLoginName()).append("/temp/");
                        StringBuffer targetPart = new StringBuffer();
                        targetPart.append("/files/").append(contact.getId()).append("/");
                        fileModel.setFileUrl(fileUrl[i].replace(srcPart.toString(), targetPart.toString()));
                        fileModel.setFileName(fileName[i]);
                        fileModel.setFileType(3);
                        fileModel.setUserName(user.getName());
                        fileModel.setFileStatus(1);
                        fileModel.setFileComment("");
                        fileModel.setUserId(ShiroUtils.getUserId());
                        fileModel.setMainId(contactSonCreate.getDetailId());
                        checkDao.addFileInfo2(fileModel);// 上传附件
                    }
                }
            }
            logService.saveLog("创建项目联络单", "项目编号：" + Code);
        } catch (NumberFormatException e) {
            e.printStackTrace();
        }
        return 1;
    }

    /**
     * 创建人 联络单编辑
     */
    @Transactional(rollbackFor = Exception.class)
    public String EditContact1(Integer dsnContactId, String canYuBranchIdList,
                               String content, Integer proId, String proCode,
                               String proName, Integer proQty, String special,
                               String proPart, String questionType, String customer,
                               String insSite, String[] fileUrl, String[] fileName,
                               String[] fileId) {
        User user = ShiroUtils.getUser();
        //todo 5.主单 修改 create_time时间 ， liaison_id_list ，liaison_branch_id_list  联络人拼接字符串  项目信息...
        Contact contactSheet = new Contact();
        contactSheet.setConId(dsnContactId);
        contactSheet.setProId(proId);
        contactSheet.setProCode(proCode);
        contactSheet.setProName(proName);
        contactSheet.setProNum(proQty);
        contactSheet.setSpecial(special);
        contactSheet.setProPart(proPart);
        contactSheet.setConType(questionType);
        contactSheet.setCustomer(customer);
        contactSheet.setInsSite(insSite);
        Post userPost = proDao.queryUserPostInfo(user.getId());//获取用户  部门 科室 信息
        /**拼接 创建人id 为字符串*/
        String createBranchId = "," + userPost.getBranchId();
        String liaisonBranchIdList = canYuBranchIdList + createBranchId;
        /**设置字段 LiaisonBranchIdList 的值为 前台传来的参与人科室id list  + ,创建人科室id*/
        contactSheet.setLiaisonBranchIdList(liaisonBranchIdList);
        String[] branchList = liaisonBranchIdList.split(",");
        boolean f1 = branchList[1].equals("") || branchList.length < 2;
        String userIdList = "";
//        if (!f1) {
        for (int i = 0; i < branchList.length; i++) {
            if (i == branchList.length - 1) {
                /** 查询出创建人（科长）id*/
                int userId = proDao.queryUserIdByBranchId(Integer.parseInt(branchList[i]));
                userIdList += userId;
            } else {
                /** 查询出参与人（科长）id*/
                int userId = proDao.queryUserIdByBranchId(Integer.parseInt(branchList[i]));
                userIdList += userId + ",";
            }
        }
//        }
        contactSheet.setLiaisonIdList(userIdList);//设置字段 liaisonIdList 的值
        /**更新主表信息*/
        contactDao.updateContactByConId(contactSheet);
        //todo 1.子单 创建人 对应 该条记录 修改 content  content_time  字段
        contactDao.updateCreateDetailByConId(dsnContactId, content.replaceAll("\r\n|\r|\n|\n\r", "<br>")
                .replaceAll(" ", "&ensp;"));
        //todo 2.子单 删除原 所有参与人记录 (创建人未删除，已在此前修改)
        contactDao.deleteCanYuContact(dsnContactId);
        //todo 3.子单 插入新 参与人 对应记录
        Contact contactSonCanYu = new Contact();
        int q = branchList.length;
        boolean f2 = q < 2 || branchList[1].equals("");
//        if (!f2) {
        for (int i = 0; i < branchList.length - 1; i++) {
            int userId = proDao.queryUserIdByBranchId(Integer.parseInt(branchList[i]));
            Post canYuUserPost = proDao.queryUserPostInfo(userId); //参与人人 用户 部门 科室 信息
            contactSonCanYu.setConId(dsnContactId);
            contactSonCanYu.setConIdentity(2);//创建人 con_identity 值为1   参与人 con_identity 为2
//                contactSonCanYu.setEditId2(canYuUserPost.getSysId());
//                contactSonCanYu.setEditName2(canYuUserPost.getUserName());
            contactSonCanYu.setEditName1(user.getName());
            contactSonCanYu.setBranchId(canYuUserPost.getBranchId());
            contactSonCanYu.setBranchName(canYuUserPost.getBranchName());
            contactSonCanYu.setDetailIsDel(0);
//                if (userPost.getBranchName().equals("销售科") || userPost.getBranchName().equals("项目科")) {
//                    contactSonCanYu.setDetailStatus1(2);//销售科 项目科 创建即为待审核
//                    contactSonCanYu.setDetailStatus2(2);//销售科 项目科 创建即为待审核
//                } else {
            contactSonCanYu.setDetailStatus1(1);
            contactSonCanYu.setDetailStatus2(1);
//                }
            //向子表中插入数据
            contactDao.insertNewContactDetail2(contactSonCanYu);
//            }
        }
        //todo 4.附件表  String[]fileId 为创建时上传的附件id 比对若是减少-> 在附件表中查到缺少的数据并删除
        //todo          checkDao.delFileById(fileId);//删除附件     String[] fileUrl, String[] fileName 为新增附件 上传即可
        Contact createContact = contactDao.queryCreateContactByConId(dsnContactId);//获取创建人 contact
        List<FileModel> oldFileList = checkDao.selectFileInfoByDetailId(createContact.getDetailId(), 3);
        ArrayList oldFileIdList = new ArrayList();
        boolean t1 = oldFileList == null || oldFileList.size() == 0;
        if (!t1) {
            for (int i = 0; i < oldFileList.size(); i++) {
                oldFileIdList.add(oldFileList.get(i).getFileId() + "");
            }
        }
        ArrayList newFileIdList = new ArrayList();
        boolean t2 = fileId == null || fileId.length == 0;
        if (!t2) {
            for (int i = 0; i < fileId.length; i++) {
                newFileIdList.add(fileId[i]);
            }
        }
        oldFileIdList.removeAll(newFileIdList); //求 差集  ->  结果 为被删除的附件id
        boolean f3 = oldFileIdList == null || oldFileIdList.size() == 0;
        if (!f3) {
            for (int i = 0; i < oldFileIdList.size(); i++) {
                int id = Integer.parseInt(oldFileIdList.get(i) + "");
                checkDao.delFileById(id);
            }
        }
        //5. fileUrl  fileName  为 新上传的附件 ->在附件表中 插入数据 fileType为3   checkDao.addFileInfo2(fileModel);// 上传附件
        if (fileUrl != null) {
            if (fileUrl.length > 0) {
                int l2 = fileUrl.length;
                for (int i = 0; i < l2; i++) {
                    FileModel fileModel = new FileModel();
                    StringBuffer dir = new StringBuffer();
                    dir.append(uploadPath).append(createContact.getDetailId()).append("/");
                    try {
                        org.apache.commons.io.FileUtils.moveToDirectory(new File(fileUrl[i]), new File(dir.toString()), true);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    StringBuffer srcPart = new StringBuffer();
                    srcPart.append(uploadPath).append(ShiroUtils.getLoginName()).append("/temp/");
                    StringBuffer targetPart = new StringBuffer();
                    targetPart.append("/files/").append(createContact.getDetailId()).append("/");
                    fileModel.setFileUrl(fileUrl[i].replace(srcPart.toString(), targetPart.toString()));
                    fileModel.setFileName(fileName[i]);
                    fileModel.setFileType(3);
                    fileModel.setUserName(user.getName());
                    fileModel.setFileStatus(1);
                    fileModel.setFileComment("");
                    fileModel.setUserId(ShiroUtils.getUserId());
                    fileModel.setMainId(createContact.getDetailId());
                    checkDao.addFileInfo2(fileModel);// 上传附件
                    logService.saveLog("联络单编辑保存", "联络单id：" + dsnContactId);
                }
            }
        }
        return "修改成功";
    }


    /**
     * 参与人 联络单编辑
     */
    @Transactional(rollbackFor = Exception.class)
    public String EditContact2(Integer dsnContactId, String content, String[] fileUrl, String[] fileName, String[] fileId, String postTel) {
        User user = ShiroUtils.getUser();
        /**修改参与人 编辑内容*/
        contactDao.updateCanYuDetailByConId(dsnContactId, content.replaceAll("\r\n|\r|\n|\n\r", "<br>")
                .replaceAll(" ", "&ensp;"), user.getDeptId(), user.getId(), user.getName(), postTel);
        Contact canYuContact = contactDao.queryCanYuContactByConIdAndUserName(dsnContactId, user.getDeptId());//获取参与人 contact
        List<FileModel> oldFileList = checkDao.selectFileInfoByDetailId(canYuContact.getDetailId(), 3);
        ArrayList oldFileIdList = new ArrayList();
        boolean t1 = oldFileList == null || oldFileList.size() == 0;
        if (!t1) {
            for (int i = 0; i < oldFileList.size(); i++) {
                oldFileIdList.add(oldFileList.get(i).getFileId() + "");
            }
        }
        ArrayList newFileIdList = new ArrayList();
        boolean t2 = fileId == null || fileId.length == 0;
        if (!t2) {
            for (int i = 0; i < fileId.length; i++) {
                newFileIdList.add(fileId[i]);
            }
        }
        oldFileIdList.removeAll(newFileIdList); //求 差集  ->  结果 为被删除的附件id
        boolean f3 = oldFileIdList == null || oldFileIdList.size() == 0;
        if (!f3) {
            for (int i = 0; i < oldFileIdList.size(); i++) {
                int id = Integer.parseInt(oldFileIdList.get(i) + "");
                checkDao.delFileById(id);
            }
        }
        //5. fileUrl  fileName  为 新上传的附件 ->在附件表中 插入数据 fileType为3   checkDao.addFileInfo2(fileModel);// 上传附件
        if (fileUrl != null) {
            if (fileUrl.length > 0) {
                int l2 = fileUrl.length;
                for (int i = 0; i < l2; i++) {
                    FileModel fileModel = new FileModel();
                    StringBuffer dir = new StringBuffer();
                    dir.append(uploadPath).append(canYuContact.getDetailId()).append("/");
                    try {
                        org.apache.commons.io.FileUtils.moveToDirectory(new File(fileUrl[i]), new File(dir.toString()), true);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    StringBuffer srcPart = new StringBuffer();
                    srcPart.append(uploadPath).append(ShiroUtils.getLoginName()).append("/temp/");
                    StringBuffer targetPart = new StringBuffer();
                    targetPart.append("/files/").append(canYuContact.getDetailId()).append("/");
                    fileModel.setFileUrl(fileUrl[i].replace(srcPart.toString(), targetPart.toString()));
                    fileModel.setFileName(fileName[i]);
                    fileModel.setFileType(3);
                    fileModel.setUserName(user.getName());
                    fileModel.setFileStatus(1);
                    fileModel.setFileComment("");
                    fileModel.setUserId(ShiroUtils.getUserId());
                    fileModel.setMainId(canYuContact.getDetailId());
                    checkDao.addFileInfo2(fileModel);// 上传附件
                }
            }
        }
        return "修改成功";
    }

    /**
     * 获取用户部门名称
     */
    public Post getUserDeptName(Post post) {
        return contactDao.getDept(post);
    }

    /**
     * 查找联络单
     */
    public Contact queryContactByDetailId(int detailId) {
        return contactDao.queryContactByDetailId(detailId);
    }

    /**
     * 查询其他参与人已审核通过的信息
     */
    public List<Contact> queryOtherContents(int id) {
        return contactDao.queryOtherContents(id);
    }

    /**
     * 查询参与人post信息
     */
    public List<Post> queryCanYuPosts(int id) {
        return contactDao.queryCanYuPosts(id);
    }

    /**
     * 查询创建人content
     */
    public Contact queryCreateInfo(int detailId) {
        return contactDao.queryCreateInfo(detailId);
    }

    /**
     * 联络单提交    目前 为科长提交  所长审核  所长审核完即为完结
     * todo 科员也可创建提交  -> 科长审核  -> 所长审核   即为完结   只有第一提交人才可编辑联络单
     */
    @Transactional(rollbackFor = Exception.class)
    public int submitContactById(Integer detailId) {
        try {
            User user = ShiroUtils.getUser();
            //通过提交人，判断该条联络单的创建人是 科员，还是科长
            int post = contactDao.isZhangorYuan(user.getId());
            // post==18 为科长  post==20 为科员
            if (post == 18) {

            } else if (post == 20) {

            }

            /** 查询该条明细  是创建人还是参与人  创建人需要将该 con_id的所有数据的detail_status1 都修改
             *  并且 将该条数据的detail_status2修改 && examine_id、examine_name也赋值  参与人只修改detail_status2
             *  若 该编辑人 为 销售科 或 项目科 提交 即为 审核通过 */
            Contact contact = contactDao.queryContactByDetailId(detailId);
            int conIdentity = contact.getConIdentity();
            //获取用户  部门 科室 信息
            Post userPost = proDao.queryUserPostInfo(user.getId());
            //获取该用户的审核人
            Post examinePost = proDao.queryExamineUser(user.getId());
            int examineId;
            String examineName;
            //获取当前 user 的org信息  若org.pid = null || org.pid==0 提交即为审核通过
            if (userPost.getPid() == 0 || String.valueOf(userPost.getPid()).equals("")) {
                //当前为销售科 成本科。。。
                examineId = userPost.getSysId();
                examineName = userPost.getUserName();
                if (conIdentity == 1) {
                    //是创建人
                    /**修改该条数据的detail_status2  值 为3*/
                    contactDao.examineByDetailId(detailId, 3);
                    /**修改所有参与人的detail_status1 值 为3*/
                    contactDao.updateCanYuStatus1(detailId, 3);
                    //examine_id、examine_name也赋值
                    contactDao.updateExaminePerson(detailId, examineId, examineName);
                    /**审核时间*/
                    contactDao.examineTimeAndOpin(detailId, "");
                    /**发起人审核通过，修改sheet表状态为 1 已发起 */
                    contactDao.updateSheetStatus(detailId, 1);
                } else {
                    //是参与人
                    /**修改该条数据的detail_status2  值 为2*/
                    contactDao.examineByDetailId(detailId, 3);
                    //examine_id、examine_name也赋值
                    contactDao.updateExaminePerson(detailId, examineId, examineName);
                    //todo 查看该联络单是否所有人都已审核通过，
                    //todo 若是，需要修改主表状态值，即 --> 每次审核都要查询一次所有人的 detail_status2
                    List<Contact> contacts = contactDao.queryAllContactByDetailId(detailId);
                    boolean flag = true;
                    for (int i = 0; i < contacts.size(); i++) {
                        int j = contacts.get(i).getDetailStatus2();
                        if (j != 3) {
                            flag = false;
                            break;
                        }
                    }
                    if (flag) {
                        /**flag为真 -> 所有参与人都已审核通过 ， 修改sheet表总体状态 为 3 已完结*/
                        contactDao.updateSheetStatus(detailId, 3);
                    } else {
                        /**flag为假 -> 不是所有参与人审核都通过，修改sheet表总体状态 为 2 回复中 */
                        contactDao.updateSheetStatus(detailId, 2);
                    }
                    /**审核时间*/
                    contactDao.examineTimeAndOpin(detailId, "");
                }
            } else {
                examineId = examinePost.getSysId();
                examineName = examinePost.getUserName();
                if (conIdentity == 1) {
                    //是创建人
                    /**修改该条数据的detail_status2  值 为2*/
                    contactDao.examineByDetailId(detailId, 2);
                    /**修改所有参与人的detail_status1 值为2*/
                    contactDao.updateCanYuStatus1(detailId, 2);
                    //examine_id、examine_name也赋值
                    contactDao.updateExaminePerson(detailId, examineId, examineName);
                } else {
                    //是参与人
                    /**修改该条数据的detail_status2  值 为2*/
                    contactDao.submitContactByDetailId(detailId);
                    //examine_id、examine_name也赋值
                    contactDao.updateExaminePerson(detailId, examineId, examineName);
                }
            }
            logService.saveLog("联络单提交", "联络单id：" + contact.getConId());

        } catch (Exception e) {
            e.printStackTrace();
            return 2;
        }
        return 1;
    }

    /**
     * 审核页面列表查询
     */
    public List<Contact> queryContactExamineList(Contact contact) {
        return contactDao.queryContactExamineList(contact);
    }

    /**
     * 审核通过
     */
    @Transactional(rollbackFor = Exception.class)
    public int contactAgreeContact(Integer detailId) {
        try {
            //todo 判断审核人身份  科长审核后 状态为2  所长为3
            User user = ShiroUtils.getUser();
            //通过审核人，判断该条联络单的审核人是 所长，还是科长
            int post = contactDao.isZhangorYuan(user.getId());
            // post==18 为科长  post==19 为所长
            if (post == 19) {
                //2.所长审核
                /**修改该条记录的detail_status2 值为3*/
                contactDao.examineByDetailId(detailId, 3);
                /**审核时间*/
                contactDao.examineTimeAndOpin(detailId, "");
                Contact contact = contactDao.queryContactByDetailId(detailId);
                if (contact.getConIdentity() == 1) {
                    /**修改所有参与人的detail_status1 值为3*/
                    contactDao.updateCanYuStatus1(detailId, 3);
                    /**发起人审核通过，修改sheet表状态为 1 已发起*/
                    contactDao.updateSheetStatus(detailId, 1);
                }
                //todo 查看该联络单是否所有人都已审核通过，
                //todo 若是，需要修改主表状态值，即 --> 每次审核都要查询一次所有人的 detail_status2
                List<Contact> contacts = contactDao.queryAllContactByDetailId(detailId);
                boolean flag = true;
                for (int i = 0; i < contacts.size(); i++) {
                    int j = contacts.get(i).getDetailStatus2();
                    if (j != 3) {
                        flag = false;
                        break;
                    }
                }
                if (flag) {
                    /**flag为真 -> 所有参与人都已审核通过 ， 修改sheet表总体状态 为 3 已完结*/
                    contactDao.updateSheetStatus(detailId, 3);
                } else {
                    /**flag为假 -> 不是所有参与人审核都通过，修改sheet表总体状态 为 2 回复中 */
                    contactDao.updateSheetStatus(detailId, 2);
                }

                logService.saveLog("联络单审核通过", "联络单id：" + contact.getConId());
            } else if (post == 18) {
                //1.科长审核
                /**修改该条记录的detail_status2 值为2*/
                contactDao.examineByDetailId(detailId, 2);
                /**审核时间*/
                contactDao.examineTimeAndOpin(detailId, "");
                /**修改审核人 为该科长的所长*/
                User suoZhang = contactDao.selectSuoZhangbyKeZhang(user.getId());
                contactDao.updateExaminePerson(detailId, suoZhang.getId(), suoZhang.getName());
                Contact contact = contactDao.queryContactByDetailId(detailId);
                if (contact.getConIdentity() == 1) {
                    /**修改所有参与人的detail_status1 值为2*/
                    contactDao.updateCanYuStatus1(detailId, 2);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            return 2;
        }
        return 1;
    }


    public List<Contact> queryContactSelectList(Contact contact) {
        return contactDao.queryContactSelectList(contact);
    }


    /**
     * 审核驳回
     */
    @Transactional(rollbackFor = Exception.class)
    public int contactRefuseContact(Integer detailId, String examineOpin) {
        try {
            Contact contact = contactDao.queryContactByDetailId(detailId);
            User user = ShiroUtils.getUser();
            //通过提交人，判断该条联络单的创建人是 科员，还是科长
            int post = contactDao.isZhangorYuan(user.getId());
            // post==18  科长驳回（编辑人必科员）
            // post==19  所长驳回（编辑人可是科长 也可 是科员）
            if (post == 18) {
                //审核驳回后 修改审核人为 空 状态修改为1
                contactDao.updateExaminePerson(detailId, 0, "");
                contactDao.examineByDetailId(detailId, 1);
                /**审核时间,驳回原因*/
                contactDao.examineTimeAndOpin(detailId, examineOpin);
            } else if (post == 19) {
                /**审核时间,驳回原因*/
                contactDao.examineTimeAndOpin(detailId, examineOpin);
                /**审核驳回后 修改审核人为 科长*/
                //判断创建人  用con_identity字段
                // con_identity=1 -> edit_name1即为创建人
                // con_identity=2 -> edit_name2即为创建人
                int editid;
                if (contact.getConIdentity() == 1) {
                    editid = contact.getEditId1();
                } else {
                    editid = contact.getEditId2();
                }
                //判断editid是否为科长
                int i = proDao.queryKeZhangIdByBranchId(contact.getBranchId());
                if (editid == i) {
                    //1.若创建人是科长  驳回->状态修改为1
                    contactDao.examineByDetailId(detailId, 1);
                } else {
                    //2.若创建人是科员  驳回->状态修改为2 审核人修改为科长
                    contactDao.examineByDetailId(detailId, 2);
                    contactDao.updateExaminePerson(detailId, i, proDao.getUserById(i).getName());
                }
                logService.saveLog("联络单审核驳回", "联络单id：" + contact.getConId());
                if (contact.getConIdentity() == 1) {
                    /**修改所有参与人的detail_status1 值为2*/
                    contactDao.updateCanYuStatus1(detailId, 2);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            return 2;
        }
        return 1;
    }


//    public String submitFandDetailContet(Integer detailId) {
//        return contactDao.submitSelectDetailContet(detailId);
//    }

}
